(function () {
    // function fn1(name:string):string{
    //     return name;
    // }
    // function f2n(name:any):any{
    //     return name;
    // }
    //泛型 先用字符去指代未知类型 使用是传入具体类型
    function fn3<T>(name: T): T {
        return name
    }
    fn3(12);   //若传入 未直接指出类型 则默认解析传入类型
    fn3<string>("12")  //若传入是直接指出类型 将类型写在<>内

    // 传入多个值
    function fn4<T, W>(a: T, b: W): [T, W] {
        return [a, b];
    }
    fn4<string, boolean>("11", true)


    //接口
    interface jiekou {
        jump: string;
    }

    //若函数中泛型继承接口 则传入的值必须符合接口条件
    function fn5<T extends jiekou>(a: T): T {
        return a;
    }
    fn5({ jump: '2' })

    class ending<T extends jiekou> {
        name: T;
        constructor(name: T) {
            this.name = name;
        }
    }
    let end = new ending({ jump: '20' })
    console.log(end);

})()